package console

import (
	"fmt"
	"os"
	"strings"

	"com.game.snake/consts"
	"com.game.snake/service"
)

// 游戏中 处理用户输入
func (handle *handler) handleInput() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("handleInput 捕获到 panic:", err)
		}
	}()

	for {
		// 执行定时任务
		input, err := reader.ReadString('\n') // 读取用户输入，直到遇到换行符为止
		if err != nil {
			fmt.Println("读取输入时发生错误:", err)
			return
		}
		// 不会阻塞
		// r, _, err := reader.ReadRune() // 不需要换行符，只需读取一个字符，从输入流中读取一个字符（包括控制字符和扩展的Unicode字符），并返回它的Unicode码点、读取的字节数，以及可能的错误。
		// if err != nil {
		// 	fmt.Println("读取输入时发生错误:", err)
		// 	return
		// }
		// input = strings.TrimSpace(string(r))
		input = strings.TrimSpace(input)
		if input == "" {
			continue
		}
		input = strings.ToLower(input)
		if input == consts.CMD_RESTART {
			fmt.Println("重新开始")
			handle.game = service.New(handle.game.Set)
			continue
		}
		if input == consts.CMD_QUIT {
			fmt.Println("退出游戏")
			os.Exit(1)
			break
		}
		if consts.IsValidDirection(handle.game.Direction, input) {
			handle.game.Direction = input
		} else {
			fmt.Println("无效输入：", input)
		}
	}
}
